namespace Test.ConsoleProgram.Algorithm.Solution
{
    [TestDescription("算法: 0201. 数字范围按位与")]
    public class No0201_RangeBitwiseAnd : AbsBaseTestItem
    {
        /*
        给定范围 [m, n]，其中 0 <= m <= n <= 2147483647，返回此范围内所有数字的按位与（包含 m, n 两端点）。
        */

        public override void OnTest()
        {
            Assert.TestExe(RangeBitwiseAnd, 5, 7, 4);
            Assert.TestExe(RangeBitwiseAnd, 0, 1, 0);
        }

        public int RangeBitwiseAnd(int m, int n)
        {
            int shift = 0;
            while (m < n)
            {
                m >>= 1;
                n >>= 1;
                shift++;
            }
            return m << shift;
        }
    }
}
